package leetcode.day;

// 27. 移除元素
public class RemoveElement {
    public static void main(String[] args) {
        int[] data = {3,2,2,3};
        System.out.println(removeElement2(data, 3));
    }

    // 双指针
    public static int removeElement(int[] nums, int val) {
        int index=0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i]!=val){
                nums[index++]=nums[i];
            }
        }
        return index;
    }

    // 双指针优化
    // 思路就是将值不等于val的和等于val的整理到一起
    public static int removeElement2(int[] nums, int val) {
        int j = nums.length-1;
        for (int i = 0; i <=j; i++) {
            if (nums[i]==val){
                swap(nums,i--,j--);
            }
        }
        return j+1;

    }

    private static void swap(int[] nums, int i, int j) {
        int tmp = nums[i];
        nums[i]=nums[j];
        nums[j]=tmp;
    }
}
